#include <stdio.h>

#define MAXSIZE 100
//目的：实现一个顺序表，用数组来存储数据
typedef int ElementType;
typedef struct {
    ElementType arr[MAXSIZE];//array data
    int len;
}SqList;


//插入
/*
 * 输入:表，位置，元素
pos:位置 1<=pos<=len
  输出：无
 */
void insert(SqList *list,int pos,ElementType x){



    //处理边界条件
    if(pos<1||pos>list->len){
        printf("请输入正确的范围\n");
    }
    else{
        //插入
        //先移动，从后往前移动
        int i;
        for ( i = list->len-1; i >=pos-1; i--) {
            list->arr[i+1]=list->arr[i];

        }
        //再插入
        list->arr[i+1]=x;
        //list->arr[pos-1]=x;

        //更新length
        list->len++;


    }



}

//2.删除
/*function:删除线性表上的某一个元素
 * 函数名：delete()
 * 输入:线性表，位置
 * 输出：没有
 *
 * */

void delete(SqList *list,int pos){

    //处理边界条件
    if(pos<1||pos>list->len){
        printf("请输入正确的范围\n");
    } else{

        //从前往后移动（赋值）
        for (int i = pos-1; i <list->len-1 ; ++i) {
            list->arr[i]=list->arr[i+1];

        }
        //更新线性表的长度
        list->len--;


    }

}
//查找
//根据下标值返回元素
/*
 * 函数名：findByIndex()
 * 输入：线性表，下标值
 * 输出：ElementType类型
 *
 * */

ElementType findByIndex(SqList *list,int pos){
    return list->arr[pos-1];
}
/*
 * 根据元素返回下标值
 * 函数名：findByValue()
 * 输入：线性表 元素
 * 输出：下标值
 * */

int findByValue(SqList *list,ElementType x){
    //暴力搜索
    for (int i = 0; i < list->len; ++i) {
        if(x==list->arr[i]){
            return i;
        }

    }
    return -1;
}

int main() {
    SqList list = {1,2,3,4,5,6};
    list.len=6;
    printf("插入之前的数组\n");
    for (int i = 0; i <list.len ; ++i) {
        printf("%d ",list.arr[i]);
    }
    //插入元素9，位置2

    insert(&list,2,9);
    printf("\n插入之后的数组\n");
    for (int i = 0; i <list.len ; ++i) {
        printf("%d ",list.arr[i]);
    }

    //删除，并进行验证
    delete(&list,-3);
    printf("\n删除之后的数组\n");
    for (int i = 0; i <list.len ; ++i) {
        printf("%d ",list.arr[i]);
    }
    //查找
   ElementType value = findByIndex(&list,2);
    printf("位置%d的元素是%d\n",2,value);
    ElementType  x= 5;
    int index = findByValue(&list,x);
    printf("元素%d的下标值是%d",x,index);
    // int sum = a+b;
//int index = findByVal(&list,3);


    /*
     *void add(int a,int b,int sum){
     *    int sum = a+b;
     *    //return sum;
     * }
     * int main(){
     *   int a =1;
     *   int b=2;
     *   add(a,b,sum);
     *   printf("%d",sum)
     * }
     * */
    return 0;
}
